//package net.lcqf.tcp.config;
//
//import cn.hutool.core.util.StrUtil;
//import org.redisson.Redisson;
//import org.redisson.api.RedissonClient;
//import org.redisson.codec.JsonJacksonCodec;
//import org.redisson.config.*;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Import;
//
///**
// * Redisson 配置
// * +----------------------------------------------------------------------
// * // | Talk To [ 聊来改善地区金融服务环境，助力企业发展 ]
// * // +----------------------------------------------------------------------
// * // | Copyright (c) 2018-2024 聊来 All rights reserved.
// * // +----------------------------------------------------------------------
// * // | Licensed ( <a href="http://www.apache.org/licenses/LICENSE-2.0">apache</a> )
// * // +----------------------------------------------------------------------
// * // | @Author: 贯彻己道的云 <18970881148@qq.com>
// * // +----------------------------------------------------------------------
// * // | DateTime: 2024/6/4 14:55
// * // +----------------------------------------------------------------------
// */
//
//@Configuration
//@ConditionalOnMissingBean(RedissonClient.class)
//@Import(RedissonConfig.RedissonClientConfig.class)
//public class RedissonConfig {
//
//    private final Config config;
//    public RedissonConfig(Config config) {
//        this.config = config;
//    }
//
//    @Bean
//    public RedissonClient redissonClient() { return Redisson.create(config); }
//
//
//    @ConditionalOnMissingBean(Config.class)
//    @EnableConfigurationProperties({RedisProperties.class})
//    static class RedissonClientConfig {
//        private final RedisProperties redisProperties;
//
//        public RedissonClientConfig(RedisProperties redisProperties) {
//            this.redisProperties = redisProperties;
//        }
//
//        @Bean
//        public Config redissonClientConfig() {
//            Config config = new Config();
//
//            if (redisProperties.getSentinel() != null) {
//                // 哨兵模式
//                SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
//                RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
//                sentinelServersConfig.addSentinelAddress(sentinel.getNodes().toArray(new String[0]));
//                sentinelServersConfig.setMasterName(sentinel.getMaster());
//                sentinelServersConfig.setDatabase(redisProperties.getDatabase());
//                baseConfig(sentinelServersConfig, redisProperties);
//
//            } else if (redisProperties.getCluster() != null) {
//                // 集群模式
//                ClusterServersConfig clusterServersConfig = config.useClusterServers();
//                RedisProperties.Cluster cluster = redisProperties.getCluster();
//                clusterServersConfig.addNodeAddress(cluster.getNodes().toArray(new String[0]));
//                clusterServersConfig.setFailedSlaveReconnectionInterval(cluster.getMaxRedirects());
//                baseConfig(clusterServersConfig, redisProperties);
//            } else {
//                // 普通模式
//                SingleServerConfig singleServerConfig = config.useSingleServer();
//                String schema = redisProperties.isSsl() ? "rediss://" : "redis://";
//                singleServerConfig.setAddress(schema + redisProperties.getHost() + ":" + redisProperties.getPort());
//                singleServerConfig.setDatabase(redisProperties.getDatabase());
//                baseConfig(singleServerConfig, redisProperties);
//            }
//
//
//            config.setCodec(new JsonJacksonCodec());
//            return config;
//        }
//
//        /**
//         * 其他公共配置
//         * @param config config
//         * @param properties yml文件中配置参数
//         */
//        private void baseConfig(BaseConfig config, RedisProperties properties) {
//            if (StrUtil.isNotBlank(properties.getPassword())) {
//                config.setPassword(properties.getPassword());
//            }
//
//            if (properties.getTimeout() != null) {
//                config.setTimeout(Long.valueOf(properties.getTimeout().getSeconds() * 1000).intValue());
//            }
//
//            if (StrUtil.isNotBlank(properties.getClientName())) {
//                config.setClientName(properties.getClientName());
//            }
//        }
//    }
//}
